# Домашнее задание к занятию «Защита сети»

## Подготовка к выполнению заданий

Подготовка защищаемой системы:

установите Suricata,

установите Fail2Ban.

Подготовка системы злоумышленника: установите nmap и thc-hydra либо скачайте и установите Kali linux.

Обе системы должны находится в одной подсети.

## Задание 1

Проведите разведку системы и определите, какие сетевые службы запущены на защищаемой системе:

sudo nmap -sA < ip-адрес >

sudo nmap -sT < ip-адрес >

sudo nmap -sS < ip-адрес >

sudo nmap -sV < ip-адрес >

По желанию можете поэкспериментировать с опциями: https://nmap.org/man/ru/man-briefoptions.html.

В качестве ответа пришлите события, которые попали в логи Suricata и Fail2Ban, прокомментируйте результат.

### Ответ

**-sA**

Этот тип сканирования сильно отличается от всех других тем, что он не способен определить открый порт open (или даже открытый|фильтруемый). Он используются для выявления правил брандмауэров, определения учитывают ли он состояние или нет, а также для определения фильтруемых ими портов.

Пакет запроса при таком типе сканирования содержит установленным только ACK флаг (если не используется --scanflags). 
При сканировании нефильтруемых систем, открытые и закрытые порты оба будут возвращать в ответ RST пакет.
Nmap помечает их как не фильтруемые, имея ввиду, что они достижимы для ACK пакетов, но неизвестно открыты они или закрыты. Порты, которые не отвечают или посылают в ответ ICMP сообщение об ошибке (тип 3, код 1, 2, 3, 9, 10 или 13), помечаются как фильтруемые.

![скрин](https://github.com/MalovAleksey/DZ/blob/main/ИБ/2024-02-15_13-17-11.png).
![скрин](https://github.com/MalovAleksey/DZ/blob/main/ИБ/2024-02-15_13-17-56.png).
Suricata определила присутствие KaliLinuks в сети еще до скангирования:) Но само сканирование не зафиксировала.


**-sT**

Это используемый по умолчанию тип TCP сканирования, когда недоступно SYN сканирование. Это происходит в случае, когда у пользователя нет привилегий для использования сырых пакетов или при сканировании IPv6 сетей. Вместо того, чтобы использовать сырые пакеты, как это происходит при большинстве других типов сканирования, Nmap "просит" операционную систему установить соединение с целевой машиной по указанному порту путем системного вызова connect. Это такой же высокоуровневый системный вызов, используемый браузерами, P2P клиентами и другими приложениями для установки соединения. Этот вызов является частью программируемого интерфейса, известного как Berkeley Sockets API. Вместо того, чтобы считывать ответы в форме сырых пакетов, Nmap использует этот API для получения информации о статусе каждой попытки соединения.

При доступности SYN сканирования, оно, безусловно, будет являться лучшм выбором. У Nmap имеется меньше возможностей контролирования высокоуровнего вызова connect по сравнению с сырыми пакетами, что делает его менее эффективным. Системный вызов завершает соединения по открытым портам, вместо того, чтобы использовать полуоткрытые соединения, как в случае с SYN сканированием. Таким образом на получение той же самой информации потребуется больше времени и пакетов, да к тому же целевые машины скорее всего запишут это соединение в свои логи. То же самое сделает и порядочная IDS, хотя большинство машин не имеют такой системы защиты. Многие службы на вашей Unix системе будут добавлять запись в системный лог (syslog), а также сообщение об ошибке, когда Nmap будет устанавливать и закрывать соединение без отправления данных. Некоторые службы даже аварийно завершают свою работу, когда это происходит, хотя это не является обычной ситуацией. Администратор, который увидит в логах группу записей о попытке установки соединения от одной и той же системы, должен знать, что его машина подверглась такому типу сканирования.

![скрин](https://github.com/MalovAleksey/DZ/blob/main/ИБ/2024-02-15_13-18-38.png).
![скрин](https://github.com/MalovAleksey/DZ/blob/main/ИБ/2024-02-15_13-18-58.png).
![скрин](https://github.com/MalovAleksey/DZ/blob/main/ИБ/2024-02-15_13-28-40.png).

**-sS**

SYN это используемый по умолчанию и наиболее популярный тип сканирования. На то есть несколько причин. Он может быть быстро запущен, он способен сканировать тысячи портов в секунду при быстром соединении, его работе не препятствуют ограничивающие бранмауэры. Этот тип сканирования относительно ненавящив и незаметен, т.к. при таком сканировании TCP соединение никогда не устанавливается до конца. Он работает с любым TCP стеком, не завися от каки-либо особенностей специфичной платформы, как это происходит при сканированиях типа FIN/NULL/Xmas, Maimon и idle сканировании. Он также предоставляет ясную и достоверную дифференциацию между состояниями открыт, закрыт и фильтруется.

Эту технику часто называют сканированием с использованием полуотрытых соединений, т.к. вы не открываете полного TCP соединения. Вы посылаете SYN пакет, как если бы вы хотели установить реальное соединение и ждете. Ответы SYN/ACK указывают на то, что порт прослушивается (открыт), а RST (сброс) на то, что не прослушивается. Если после нескольких запросов не приходит никакого ответа, то порт помечается как фильтруемый. Порт также помечается как фильтруемый, если в ответ приходит ICMP сообщение об ошибке недостижимости (тип 3, код 1,2, 3, 9, 10 или 13).

![скрин](https://github.com/MalovAleksey/DZ/blob/main/ИБ/2024-02-15_13-33-48.png).
![скрин]().
![скрин](https://github.com/MalovAleksey/DZ/blob/main/ИБ/2024-02-15_13-33-23.png).

**-sV**

Включает функцию определения версии. Вы также можете использовать опцию -A, которая помимо других функций включает определение версии.

![скрин](https://github.com/MalovAleksey/DZ/blob/main/ИБ/2024-02-15_14-06-58.png).
![скрин](https://github.com/MalovAleksey/DZ/blob/main/ИБ/2024-02-15_14-09-21.png).
![скрин](https://github.com/MalovAleksey/DZ/blob/main/ИБ/2024-02-15_14-11-16.png).

## Задание 2

Проведите атаку на подбор пароля для службы SSH:

hydra -L users.txt -P pass.txt < ip-адрес > ssh

Настройка hydra:
создайте два файла: users.txt и pass.txt;
в каждой строчке первого файла должны быть имена пользователей, второго — пароли. В нашем случае это могут быть случайные строки, но ради эксперимента можете добавить имя и пароль существующего пользователя.
Дополнительная информация по hydra: https://kali.tools/?p=1847.

Включение защиты SSH для Fail2Ban:
открыть файл /etc/fail2ban/jail.conf,
найти секцию ssh,
установить enabled в true.
Дополнительная информация по Fail2Ban:https://putty.org.ru/articles/fail2ban-ssh.html.

В качестве ответа пришлите события, которые попали в логи Suricata и Fail2Ban, прокомментируйте результат.

### Ответ

**Без fail2ban**

Ход сканирования хорошо видно в логе /var/log/auth.log

![скрин](https://github.com/MalovAleksey/DZ/blob/main/ИБ/2024-02-15_16-22-52.png).

**После включения fail2ban**

ip адрес блокируется, hydra останавливает работу.

![скрин](https://github.com/MalovAleksey/DZ/blob/main/ИБ/2024-02-15_16-24-57.png).
